import java.util.HashMap;

/**
 * @projectName: com.xiayuanxing.designPattern
 * @className: ConcreteMediator
 * @author: xiayuanxing
 * @description: 具体的中介类
 * @date: 2022/1/10 16:39
 * @version: 1.0
 */
public class ConcreteMediator extends Mediator{


    /**集合，放入所有的同事对象*/
    private HashMap<String, Colleague> colleagueMap;
    private HashMap<String, String> interMap;


    /**构造函数*/
    public ConcreteMediator() {
      colleagueMap = new HashMap<String, Colleague>();
      interMap = new HashMap<String, String>();
    }


    @Override
    public void Register(String colleagueName, Colleague colleague) {
        colleagueMap.put(colleagueName,colleague);
        if (colleague instanceof Alarm){
            interMap.put("Alarm",colleagueName);
        }else if (colleague instanceof CoffeeMachine){
            interMap.put("CoffeeMachine",colleagueName);
        }else if (colleague instanceof TV){
            interMap.put("TV",colleagueName);
        }else if (colleague instanceof  Curtains){
            interMap.put("Curtains",colleagueName);
        }
    }


    //具体中介者的核心方法
    //根据得到的消息完成对应的任务
    //中介者在这个方法，协调各个具体的同事对象完成任务
    @Override
    public void GetMessage(int stateChange, String colleagueName) {

        //处理闹钟发出的消息
        if (colleagueMap.get(colleagueName) instanceof Alarm){
            if (stateChange == 0){
                ((CoffeeMachine)(colleagueMap.get(interMap.get("CoffeeMachine")))).StartCoffee();
                ((TV)(colleagueMap.get(interMap.get("TV")))).StartTv();
            }else if (stateChange == 1){
                ((TV)(colleagueMap.get(interMap.get("TV")))).StopTv();
            }
        }else if (colleagueMap.get(colleagueName) instanceof CoffeeMachine){
            ((Curtains)(colleagueMap.get(interMap.get("Curtains")))).UpCurtains();
        }else if (colleagueMap.get(colleagueName) instanceof TV){
            //如果Tv发送消息
        }else if (colleagueMap.get(colleagueName) instanceof Curtains){
            //如果是窗帘发送消息
        }

    }

    @Override
    public void SendMessage() {

    }
}
